package com.example.domain.dto.product;

import com.example.domain.entity.enums.ProductStatus;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.Min;

/**
 * 商品搜索/过滤请求DTO
 * 
 * @author Means
 * @since 2025-10-27
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ProductSearchRequest {
    
    /**
     * 关键词（搜索商品名称）
     */
    private String keyword;
    
    /**
     * 商品状态过滤
     */
    private ProductStatus status;
    
    /**
     * 商品分类过滤
     */
    private String category;
    
    /**
     * 是否只查询有折扣的商品
     */
    private Boolean hasDiscountOnly;
    
    /**
     * 页码（从0开始）
     */
    @Min(value = 0, message = "页码不能小于0")
    private Integer page;
    
    /**
     * 每页大小
     */
    @Min(value = 1, message = "每页大小不能小于1")
    private Integer size;
    
    /**
     * 排序字段（如：name, code, createdAt）
     */
    private String sortBy;
    
    /**
     * 排序方向（ASC或DESC）
     */
    private String sortDirection;
    
    /**
     * 获取页码（默认0）
     */
    public int getPageOrDefault() {
        return page != null ? page : 0;
    }
    
    /**
     * 获取每页大小（默认20）
     */
    public int getSizeOrDefault() {
        return size != null ? size : 20;
    }
    
    /**
     * 获取排序字段（默认createdAt）
     */
    public String getSortByOrDefault() {
        return sortBy != null ? sortBy : "createdAt";
    }
    
    /**
     * 获取排序方向（默认DESC）
     */
    public String getSortDirectionOrDefault() {
        return sortDirection != null ? sortDirection.toUpperCase() : "DESC";
    }
}

